javascript模块化编程( 上)


<!–markdown–>ps:写这篇文章的时候,我的大脑已经是处于加班了一个多月的情况下。文章写得很乱,会不定时修改,也有直接删除的可能

#什么是javascript模块化

引用一下阮一峰前辈的一句话:理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。
广义上而言。.css的重复利用,.js文件的组件封装都可以算是前段的模块化实现。
早在2012初的时候(我用的时候),extjs的前端mvc框架就是很先进的javascript模块化加载了。
同样的还有YUI的add 和namespace等。所以,javascript其实离我们并不远,更不陌生。

#为什么需要模块化编程

<del>十年前,网页还只是简单的承载着一些多媒体信息,甚至于我们观看视频还要安装各种各样的视频播放插件(如 windows player、realplayer等等)。当时的网页页面并不复杂,甚至很多页面都没有出现javascript语句。现在绝对会被杀千刀的一些代码写法在当时确非常流行,举个栗子

&lt;input type=&#39;button&#39; onclick=&#34;handler()&#34; /&gt;

更有甚至

&lt;input type=&#39;button&#39; onclick=&#39;function(){log(&#39;hahahahah&#39;);}&#39; /&gt;

<del>随着我们的硬件发展越来越好,加上各种现代浏览器助力,我们的网页已经早已不满足只是简单的呈现信息。b/s应用早已侵吞了c/s应用的半壁江山。随之而来的便是团队协作,代码越来越发杂,逻辑越来越发杂,代码维护越来麻烦。那么和其他语言一样,模块化是必然。

看这里就好。网页越来越复杂,越来越像桌面程序,需要一个团队分工协作、进度管理、单元测试等等......开发者不得不使用软件工程的方法,管理网页的业务逻辑。

#AMD规范和CMD规范

要想要随意的使用别的代码,有一个前提便是,大家都用一样的规范或标准去写代码。CMD规范AMD规范 。两者最大的区别就是AMD是异步加载的,而CMD是同步加载的。CMD比起AMD规范要早不少,主要用于服务端。
CMD是一个很好的规范。但是,它并不适用于客户端。原因如下:
1.javascript是单线程语言
2.由于一,在加载时浏览器会假死
3.网络无法控制,若需要10s加载,参照2

#模块化的弊端

1.模块化的前提是规范,为了符合规范,程序员需要更改编程习惯
2.老项目想要模块化需要成本
3.最重要的,模块化难以避免的会造成文件碎片化,造成请求数剧增。

在AMD规范里,在请求模块的时候会同步加载模块所需的类库,这进一步加剧了碎片,增加请求数量。如果不解决这个问题,一个页面3位数的请求数是一件很恐怖的事情。
百度fis对此提出的解决方案是将所有依赖打包以减少请求数。同时,依赖和模块分开打包,可以很好的利用文件缓存。但是,每次发布都要打包实在太麻烦,于是,他们就正大光明的给自己的fis打广告了 -0 -